// 给定一组非负整数 nums，重新排列每个数的顺序（每个数不可拆分）使之组成一个最大的整数。

// 注意：输出结果可能非常大，所以你需要返回一个字符串而不是整数。


// 输入：nums = [3,30,34,5,9]
// 输出："9534330"


// 高位字典序 
int cmp_str(const void *a, const void *b) { // 传入的是&strs[i]
    char s1[20], s2[20];
    sprintf(s1, "%d%d", *(int *)a, *(int *)b);
    sprintf(s2, "%d%d", *(int *)b, *(int *)a);
    return strcmp(s2, s1);  // 降序
}

char * largestNumber(int* nums, int numsSize) {

    qsort(nums, numsSize, sizeof(int), cmp_str);
    if (nums[0] == 0) return "0";

    char tmp[10];
    char *res = malloc(sizeof(char)*(1000));
    char *p = res;
    for (int i = 0; i < numsSize; i++) {
        sprintf(p, "%d", nums[i]);
        p += strlen(p);
    }
    return res;
}